library(GENIE3)
library(doParallel)
library(igraph)
library(tidyverse)
library(DT)
library(reticulate)
library(learn2count)
library(rbenchmark)
library(reshape2)
library(gridExtra)
library(DiagrammeR)
source("dropo.R")
source("generate_adjacency.R")
source("adj_cutoff.R")
source("simmetric.R")
source("pscores.R")
source("plotg.R")
source("compare_consensus.R")
source("earlyj.R")
DiagrammeR::grViz("
digraph biological_workflow {
  # Set up the graph attributes
  graph [layout = dot, rankdir = TB]

  # Define consistent node styles
  node [shape = rectangle, style = filled, color = lightblue, fontsize = 12]

  # Define nodes for each step
  StartNode [label = 'Biological String Regulatory Network', shape = oval, color = forestgreen, fontcolor = black]
  AdjacencyMatrix [label = 'Create Adjacency Matrix', shape = rectangle, color = lightblue]
  SimulateData [label = 'Simulate Single-Cell Data', shape = rectangle, color = lightyellow]

  # Reconstruction using Three Packages
  GENIE3Step [label = 'GENIE3: Calculate Gene Weights', shape = rectangle, color = lightpink]
  GRNBoostStep [label = 'GRNBoost2: Calculate Gene Weights', shape = rectangle, color = lightpink]
  Learn2CountStep [label = 'learn2count: Calculate Gene Weights', shape = rectangle, color = lightpink]

  # Generate Adjacency Matrices for Each Package
  GENIE3Adj [label = 'GENIE3: Generate Adjacency Matrix', shape = rectangle, color = khaki]
  GRNBoostAdj [label = 'GRNBoost2: Generate Adjacency Matrix', shape = rectangle, color = khaki]
  Learn2CountAdj [label = 'learn2count: Generate Adjacency Matrix', shape = rectangle, color = khaki]

  # Symmetrize Step
  Symmetrize [label = 'Symmetrize Adjacency Matrix', shape = rectangle, color = lightyellow]

  # Comparison with Ground Truth
  Compare [label = 'Compare with Ground Truth Adjacency', shape = rectangle, color = salmon]

  # Analysis and Visualization
  Analysis [label = 'Analysis and Visualization', shape = rectangle, color = lightcoral]

  # Define the workflow structure
  StartNode -> AdjacencyMatrix
  AdjacencyMatrix -> SimulateData
  SimulateData -> GENIE3Step
  SimulateData -> GRNBoostStep
  SimulateData -> Learn2CountStep
  GENIE3Step -> GENIE3Adj
  GRNBoostStep -> GRNBoostAdj
  Learn2CountStep -> Learn2CountAdj
  GENIE3Adj -> Symmetrize
  GRNBoostAdj -> Symmetrize
  Learn2CountAdj -> Symmetrize
  Symmetrize -> Compare
  Compare -> Analysis
}
")

Load data

adjm <- read.table("./../data/adjacency_matrix.csv", header = T, row.names = 1, sep = ",") %>% as.matrix()
link_list_genie3_list <- readRDS("./../analysis/genie3_network_list.RDS")
elink_list_genie3_list <- readRDS("./../analysis/early_genie3_network_list.RDS")
all_grn_links <- readRDS("./../analysis/grnboost2_network_list.RDS")

Early Join

elink_list_genie3_list <- simmetric(elink_list_genie3_list, weight_function = "mean")
elink_list_genie3_list[[1]] %>%
    datatable(extensions = 'Buttons',
              options = list(
                dom = 'Bfrtip',
                buttons = c('csv', 'excel'),
                scrollX = TRUE,
                pageLength = 10), 
              caption = "GENIE3 simmetric output")
adj_matrix_list <- generate_adjacency(elink_list_genie3_list)

adj_matrix_list[[1]] %>%
    datatable(extensions = 'Buttons',
              options = list(
                dom = 'Bfrtip',
                buttons = c('csv', 'excel'),
                scrollX = TRUE,
                pageLength = 10), 
              caption = "GENIE3 adjacency")
adj_matrix_list <- adj_cutoff(adj_matrix_list, weight_quantile = 0.80)

adj_matrix_list$binary_matrices[[1]] %>%
    datatable(extensions = 'Buttons',
              options = list(
                dom = 'Bfrtip',
                buttons = c('csv', 'excel'),
                scrollX = TRUE,
                pageLength = 10), 
              caption = "GENIE3 adjacency")
scores <- pscores(adjm, adj_matrix_list$binary_matrices)

print(scores$Jaccard_Heatmap)

print(scores$Metrics_Barplot)

scores$Metrics_Results %>%
    datatable(extensions = 'Buttons',
              options = list(
                dom = 'Bfrtip',
                buttons = c('csv', 'excel'),
                scrollX = TRUE,
                pageLength = 10), 
              caption = "scores")
plots <- plotg(adj_matrix_list$binary_matrices)

ajm_compared <- compare_consensus(adj_matrix_list$binary_matrices, adjm)

Late Join

link_list_genie3_list <- simmetric(link_list_genie3_list, weight_function = "mean")
link_list_genie3_list[[1]] %>%
    datatable(extensions = 'Buttons',
              options = list(
                dom = 'Bfrtip',
                buttons = c('csv', 'excel'),
                scrollX = TRUE,
                pageLength = 10), 
              caption = "GENIE3 simmetric output")
adj_matrix_list <- generate_adjacency(link_list_genie3_list)

saveRDS(link_list_genie3_list, "./../analysis/genie3_adjacency_matrices.RDS")

adj_matrix_list[[1]] %>%
    datatable(extensions = 'Buttons',
              options = list(
                dom = 'Bfrtip',
                buttons = c('csv', 'excel'),
                scrollX = TRUE,
                pageLength = 10), 
              caption = "GENIE3 adjacency")
adj_matrix_list <- adj_cutoff(adj_matrix_list, weight_quantile = 0.80)

adj_matrix_list$binary_matrices[[1]] %>%
    datatable(extensions = 'Buttons',
              options = list(
                dom = 'Bfrtip',
                buttons = c('csv', 'excel'),
                scrollX = TRUE,
                pageLength = 10), 
              caption = "GENIE3 adjacency")
scores <- pscores(adjm, adj_matrix_list$binary_matrices)

print(scores$Jaccard_Heatmap)

print(scores$Metrics_Barplot)

scores$Metrics_Results %>%
    datatable(extensions = 'Buttons',
              options = list(
                dom = 'Bfrtip',
                buttons = c('csv', 'excel'),
                scrollX = TRUE,
                pageLength = 10), 
              caption = "scores")
plots <- plotg(adj_matrix_list$binary_matrices)

ajm_compared <- compare_consensus(adj_matrix_list$binary_matrices, adjm)

compared_scores <- pscores(adjm,list(ajm_compared$Consensus_Matrix))
print(compared_scores$Jaccard_Heatmap)

print(compared_scores$Metrics_Barplot)